package com.company.mtp.device.api;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 设备预约结果类
 * 
 * @author mtp
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReservationResult {
    
    /**
     * 是否预约成功
     */
    private boolean success;
    
    /**
     * 设备ID
     */
    private String deviceId;
    
    /**
     * 用户ID
     */
    private String userId;
    
    /**
     * 预约开始时间
     */
    private long startTime;
    
    /**
     * 预约结束时间
     */
    private long endTime;
    
    /**
     * 预约失败原因
     */
    private String failureReason;
    
    /**
     * 预约令牌，用于后续操作验证
     */
    private String reservationToken;
    
    /**
     * 创建成功的预约结果
     * 
     * @param deviceId 设备ID
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param reservationToken 预约令牌
     * @return 预约结果
     */
    public static ReservationResult success(String deviceId, String userId, long startTime, long endTime, String reservationToken) {
        return ReservationResult.builder()
                .success(true)
                .deviceId(deviceId)
                .userId(userId)
                .startTime(startTime)
                .endTime(endTime)
                .reservationToken(reservationToken)
                .build();
    }
    
    /**
     * 创建失败的预约结果
     * 
     * @param deviceId 设备ID
     * @param userId 用户ID
     * @param failureReason 失败原因
     * @return 预约结果
     */
    public static ReservationResult failure(String deviceId, String userId, String failureReason) {
        return ReservationResult.builder()
                .success(false)
                .deviceId(deviceId)
                .userId(userId)
                .failureReason(failureReason)
                .build();
    }
}